/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package aplicacio;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.config.Configuration;
import com.db4o.query.Predicate;
import domini.Ocupacio;
import domini.Plasa;
import domini.Tarifa;
import java.util.ArrayList;
import java.util.List;
import library.inout.Terminal;
import library.utilitats.JodaDT;
import org.joda.time.DateTime;

public class CU07 {


    private void gestionarCasUs() {
        Terminal.print("\n\nCu07: Desocupar una plaça i pagar l'ocupació\n\n");
        Configuration conf = Db4o.configure();
        conf.objectClass("domini.Plasa").cascadeOnUpdate(true);
        ObjectContainer objectContainer = Db4o.openFile("parking.yap");
        final int eoid = Terminal.readInt("Eoid de la plaça ? ");
        Predicate<Plasa> predicat = new Predicate<Plasa>() {

            public boolean match(Plasa plaça) {

                boolean cond = plaça.getEoid() == eoid;
                return cond;
            }
        };
        List<Plasa> places = objectContainer.query(predicat);
        Plasa plasaActivada = places.get(0);
        ArrayList<Ocupacio> ocupacions = plasaActivada.getOcupacions();
        int indexMaxim = ocupacions.size() - 1;
        Ocupacio ultimaOcupacio = ocupacions.get(indexMaxim);
        if (ultimaOcupacio.getDtFi() == null) {
            Terminal.print("Instant inicial de l'ocupació de la plaça: %s\n", ultimaOcupacio.getDtInici());
            String sdtFi = Terminal.read("Instant de l'ocupació de la plaça ? ");
            ultimaOcupacio.setDtFi(sdtFi);
            objectContainer.set(plasaActivada);
            Terminal.print("La plaça ha sigut desocupada\n");
            // Càlcul del pagament
            Predicate<Tarifa> predicatTarifes = new Predicate<Tarifa>() {

                public boolean match(Tarifa tarifa) {
                    boolean cond = true;
                    return cond;
                }
            };
            List<Tarifa> tarifes = objectContainer.query(predicatTarifes);
            for (Tarifa tar : tarifes) {
                DateTime uo = JodaDT.parseDDMMAAAAhhmm(ultimaOcupacio.getDtInici());
                DateTime di = JodaDT.parseDDMMAAAAhhmm(tar.getDtInici());
                DateTime df = JodaDT.parseDDMMAAAAhhmm(tar.getDtFi());
                boolean cond = JodaDT.esEnInterval(uo, di, df);
                if (cond) {
                    double cost = ultimaOcupacio.durada() * tar.getPreu();
                    Terminal.print("L'import de l'ocupació és: %5.1f €\n", cost);
                    break;
                }
            }
        } else {
            Terminal.print("La plaça no ha sigut desocupada doncs ja n'estaba\n");
        }
        objectContainer.close();
    }

    public static void main(final String[] args) {
        final CU07 cu = new CU07();
        cu.gestionarCasUs();
    }
}

